package cn.tedu.csmall.cart.webapi.kafka;

import cn.tedu.csmall.commons.pojo.cart.entity.Cart;
import com.google.gson.Gson;
import org.apache.commons.lang.math.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

// SpringBoot启动时,会实例化这个对象保存到Spring容器,才能执行周期运行效果
@Component
public class Producer {

    // Spring Kafka框架会自动生成能够操作Kafka的对象,并保存到Spring容器
    // 我们需要使用时,直接@Autowired
    // KafkaTemplate<[话题类型],[消息类型]>
    @Autowired
    private KafkaTemplate<String,String> kafkaTemplate;

    // 定义一个常量作为话题名称
    public static final String TOPIC_KEY="myCart";

    int i=1;
    // 编写一个每隔8秒(8000毫秒)运行一次的方法来测试Kafka消息的发送
    @Scheduled(fixedRate = 8000)
    public void sendMessage(){
        // 实例化一个Cart对象并赋值,用于消息的发送
        Cart cart=new Cart();
        cart.setId(i++);
        cart.setUserId("UU100");
        cart.setCommodityCode("PC100");
        cart.setCount(1+ RandomUtils.nextInt(10));
        cart.setPrice(10+RandomUtils.nextInt(90));
        // 现在的KafkaTemplate对象只支持发送字符串
        // 将上面cart对象,转换为json格式字符串{"id":"1","userId":"UU100","count":"8",....}
        // 利用google的gson来实现转换
        Gson gson=new Gson();
        String json=gson.toJson(cart);
        System.out.println("要发送的json格式字符串为:"+json);
        // 执行发送
        kafkaTemplate.send(TOPIC_KEY,json);
    }
}
